/**
 ******************************************************************************
 * @file           : bsp_oled.h
 * @brief          : OLED Display Driver Header File (STM32H7xx)
 ******************************************************************************
 * @attention
 *
 * OLED显示屏驱动程序头文件
 * 支持SSD1306芯片（128x64）
 * 支持I2C和SPI接口
 *
 ******************************************************************************
 */

/* Define to prevent recursive inclusion -------------------------------------*/
#ifndef __BSP_OLED_H
#define __BSP_OLED_H

#ifdef __cplusplus
extern "C" {
#endif

/* Includes ------------------------------------------------------------------*/
#include <stdint.h>
#include <stdbool.h>

/* Exported types ------------------------------------------------------------*/

/**
 * @brief OLED错误码枚举
 */
typedef enum
{
    OLED_OK = 0,                /*!< 操作成功 */
    OLED_ERROR = -1,            /*!< 操作失败 */
    OLED_ERROR_PARAM = -2,      /*!< 参数错误 */
    OLED_ERROR_TIMEOUT = -3,    /*!< 超时 */
} OLED_Error_e;

/**
 * @brief OLED显示模式枚举
 */
typedef enum
{
    OLED_MODE_NORMAL = 0,       /*!< 正常显示 */
    OLED_MODE_INVERSE           /*!< 反色显示 */
} OLED_DisplayMode_e;

/* Exported constants --------------------------------------------------------*/

/* OLED显示参数（从config.h获取） */
#define OLED_DISP_WIDTH         128
#define OLED_DISP_HEIGHT        64

/* Exported macro ------------------------------------------------------------*/
/* Exported variables --------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/

/* 初始化和控制 */
void oled_init(void);
void oled_clear(void);
void oled_display_on(void);
void oled_display_off(void);
void oled_set_display_mode(OLED_DisplayMode_e mode);

/* 基础绘图 */
void oled_set_pixel(uint8_t x, uint8_t y, bool on);
void oled_draw_line(uint8_t x1, uint8_t y1, uint8_t x2, uint8_t y2, bool on);
void oled_draw_rectangle(uint8_t x, uint8_t y, uint8_t width, uint8_t height, bool on);
void oled_fill_rectangle(uint8_t x, uint8_t y, uint8_t width, uint8_t height, bool on);

/* 字符和字符串显示 */
void oled_show_char(uint8_t x, uint8_t y, char ch, uint8_t font_size);
void oled_show_string(uint8_t x, uint8_t y, const char *str, uint8_t font_size);
void oled_show_number(uint8_t x, uint8_t y, uint32_t num, uint8_t len, uint8_t font_size);

/* 刷新显示 */
void oled_refresh(void);
void oled_refresh_area(uint8_t x, uint8_t y, uint8_t width, uint8_t height);

#ifdef __cplusplus
}
#endif

#endif /* __BSP_OLED_H */
